from pysqlite2 import dbapi2 as sqlite
from genid import genid

class Wytwory:
	
	def __init__(self,cursor): # cursor = sqlite.connect("wytwory.db").cursor()
		self.cur = cursor

	def addItem(self,itemtb): #itemtb - tablica zawiera cechy jako kody, ktore opisuja wytwor 
		id = genid(6)
		testid = self.cur.execute("select id from wytwory where id = '%s';"%id).fetchall()
		while len(testid) != 0:
			id = genid(6)
			testid = self.cur.execute("select id from wytwory where id = '%s';"%id).fetchall()
		for x in range(0,len(itemtb)):
			p = (id,itemtb[x][0],itemtb[x][1])
			self.cur.execute("insert into wytwory (id,kod,val) values %s;"%str(p))
		return True

	def findItems(self,atrtb): #atrtb - cechy z ktorymi sa poszukiwane wytwory
		query = "select id from wytwory where kod = '%s' "
		for x in range(0,len(atrtb)):
			tq = "intersect "+query
			query = query % atrtb[x]
			if x < len(atrtb)-1:
				query = query+tq
		return self.cur.execute(query+';').fetchall()

	def listAll(self,idtab = []): #idtab - lista identyfikatorow z bazy
		result = []
		if len(idtab) == 0:
			tmp = "select distinct id from wytwory;"
			idtab = self.cur.execute(tmp).fetchall()
		query = "select kod from wytwory where id = '%s';"
		for x in range(0,len(idtab)):
			result.append(self.cur.execute(query%idtab[x][0]).fetchall())
		return result

class Atrybuty:
	def __init__(self,cursor):
		self.cur = cursor
	
	def addAtr(self,cecha,kod=None,pval=0): # pval =0 cesze nie sa przypisywane dodatkowe wartosci
		# funkcja nie sprawdza, czy cecha juz jest w bazie. Wczesniej trzeba uzyc funkcji getKey
		query = "select * from klucz where %s = '%s';"
		if kod == None:
			kod = genid(5)
			while len(self.cur.execute(query%('kod',kod)).fetchall()) != 0:
				kod = genid(5)
		p = (cecha,kod,pval)
		self.cur.execute("insert into klucz values %s;"%str(p))
		return True

	def getKey(self,cecha):
		# zwraca klucz jesli istnieje dla danej cechy. w przeciwnym razie False
		kod = self.cur.execute("select kod from klucz where cecha = '%s'"%cecha).fetchall()
		if len(kod) > 0:
			return kod[0][0]
		else:
			return False







				

		
